package com.zhaopin.theswordreferstooffer;

/**
 * @author yin.peide
 * @date 2021-06-07 17:57
 * <p>
 * 在这个解题里面，注意两个地方：
 * 1、while结束的条件是n！=0，而不是n>0,因为输入中包含负数；
 * 2：左移右移n>>>1操作不会改变原始的操作值，因此需要重新复制给一个元素才能够使用移位之后得到的值
 * 面试题10： 二进制中1的个数
 */
public class Offer10 {


    public static void main(String[] args) {
        System.out.println(numberof1(11));
        System.out.println(numberof1(10));
        System.out.println(numberof1(9));
    }

    public static int numberOf1(int n) {
        int result = 0;
        while (n != 0) {
            if ((n & 1) > 0) {
                result++;
            }
            //在java里面这表示无符号右移，表明最高位补0
            n = n >>> 1;
        }
        return result;

    }

    /**
     * 该方法还不懂
     * @param n
     * @return
     */
    public static int numberof1(int n) {
        int count = 0;
        while (0 != n) {
            ++count;
            n = (n - 1) & n;
        }
        return count;
    }

}
